from PIL import Image, ImageDraw, ImageFont

def chinese_to_led_matrix(chinese_char, width=16, height=16, font_size=16):
    """
    将汉字转换为LED点阵图，用*表示点亮的像素
    
    参数:
    chinese_char: 要转换的汉字
    width: 点阵宽度
    height: 点阵高度
    font_size: 字体大小
    
    返回:
    点阵图的字符串表示
    """
    # 创建一个空白图像，背景为黑色(0)
    image = Image.new('1', (width, height), 0)
    draw = ImageDraw.Draw(image)
    
    try:
        # 尝试加载中文字体
        # Windows系统可尝试 'C:/Windows/Fonts/simhei.ttf'
        # macOS系统可尝试 '/System/Library/Fonts/PingFang.ttc'
        font = ImageFont.truetype('simhei.ttf', font_size)
    except IOError:
        # 如果找不到指定字体，使用默认字体并给出警告
        font = ImageFont.load_default()
        print("警告：未找到中文字体，可能导致显示异常")
    
    # 计算文本位置，使其居中显示（使用新版本Pillow的方法）
    # 获取文本边界框
    bbox = draw.textbbox((0, 0), chinese_char, font=font)
    text_width = bbox[2] - bbox[0]  # 计算文本宽度
    text_height = bbox[3] - bbox[1]  # 计算文本高度
    
    x = (width - text_width) // 2
    y = (height - text_height) // 2
    
    # 在图像上绘制白色(1)文字
    draw.text((x, y), chinese_char, font=font, fill=1)
    
    # 将图像转换为点阵表示
    matrix = []
    for y_coord in range(height):
        row = []
        for x_coord in range(width):
            # 如果像素是白色(1)，用*表示，否则用空格
            pixel = image.getpixel((x_coord, y_coord))
            row.append('*' if pixel else ' ')
        matrix.append(''.join(row))
    
    return '\n'.join(matrix)

if __name__ == "__main__":
    # 示例：转换汉字为LED点阵图
    while True:
        char = input("请输入一个汉字(输入q退出): ")
        if char.lower() == 'q':
            break
        if len(char) != 1:
            print("请只输入一个汉字")
            continue
        
        # 使用24x24的点阵
        led_matrix = chinese_to_led_matrix(char, 24, 24, 20)
        print(f"\n{char}的LED点阵图:")
        print(led_matrix)
        print()
    